package com.example.brisk.service.impl;

import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.segments.MergeSegments;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.brisk.entity.Book;
import com.example.brisk.mapper.BookMapper;
import com.example.brisk.service.IBookService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.brisk.vo.R;
import com.example.brisk.vo.req.BookSaveReqVo;
import com.example.brisk.vo.req.BookUpadateReqVo;
import lombok.extern.java.Log;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * book service层
 * @DS()注解指定操作的数据库,使用方法：
 * 1.类
 * 2.方法
 * 就近原则，优先使用方法配置。
 * @Log注解：用于创建日志对象，该类中可直接使用log对象，不需要再次创建。
 */
@Service
@DS("master")
@Log
public class BookServiceImpl extends ServiceImpl<BookMapper, Book> implements IBookService {

    @DS("master")
    @Override
    public R saveBook(BookSaveReqVo vo) {
        Book book = new Book();
        BeanUtils.copyProperties(vo, book);
        this.save(book);
        return R.success("创建book成功");
    }

    @DS("master")
    @Override
    public R updateById(BookUpadateReqVo vo) {
        Book book = new Book();
        BeanUtils.copyProperties(vo, book);
        this.updateById(book);
        return R.success("修改book成功");
    }

    @DS("master")
    @Override
    public R<Book> getBookById(Integer id) {
        return R.data(this.getById(id));
    }

    @DS("master")
    @Override
    public R updateBook(BookUpadateReqVo vo) {
        this.updateById(vo);
        return R.success("修改book成功");
    }
    @DS("slave")
    @Override
    public R<List<Book>> getBookList() {
        return R.data(this.list());
    }

    @DS("master")
    @Override
    public R removeBook(Integer id) {
        this.removeById(id);
        return R.success("删除book成功");
    }

    @DS("master")
    @Override
    public R<Page<Book>> getBookListByPage(Integer pageNo, Integer pageSize) {
        Page<Book> page = new Page<>();
        page.setCurrent(pageNo);
        page.setSize(pageSize);
        return R.data(this.page(page));
    }
}
